package com.ljy.my_study.leetcode.最大单词长度乘积;

import java.util.*;

/**
 * @author lijunying
 * @date 2021/11/17 11:14
 */
public class TestMain2 {

//    位运算，每个字母对应其中一位。通过map过滤有相同字母的单词。字母相同的取长度最长的。
    public int maxProduct(String[] words) {
        Map<Integer,Integer> map=new HashMap<>();
        for(int i=0;i<words.length;i++){
            int key=0;
            String w=words[i];
            int len=w.length();
            for(int j=0;j<len;j++){
                key|=1<<(w.charAt(j)-'a');
            }
            map.put(key,Math.max(len,map.getOrDefault(key,len)));
        }
        List<Integer> keyList=new ArrayList<>(map.keySet());
        int result=0;
        for(int i=0;i<keyList.size()-1;i++){
            for(int j=i+1;j<keyList.size();j++){
                if((keyList.get(i)&keyList.get(j))==0){
                    result=Math.max(result,map.get(keyList.get(i))*map.get(keyList.get(j)));
                }
            }
        }
        return result;
    }
}
